package com.yc.thread.pro1_matrix.individual;

/**
 * @author zwei
 * @create 2024-07-16 17:35
 */

import java.util.ArrayList;
import java.util.List;

/**
 * 并行的针对结果矩阵中每个元素一个线程 的乘法器
 */
public class ParalleIndividualMultiplier {
    public static void multiplt(double [][] matrix1,double [][] matrix2,double [][] result){
        List<Thread>threads=new ArrayList<>();
        int row1=matrix1.length;    //第一个矩阵的行数
        int column1=matrix1[0].length;  //第一个矩阵的列数

        int row2=matrix2.length;    //第二个矩阵的行数
        int column2=matrix2[0].length;  //第二个矩阵的列数
        for (int i=0;i<row1;i++){
            for (int j = 0; j < column2; j++) {
                //创建线程
                Thread t=new Thread( new individualMultiplierTask(result,matrix1,matrix2,i,j));
                t.start();
                threads.add(t);
                if (threads.size()%10==0){
                    waitForThread(threads);
                }
            }
        }
    }

    private static void waitForThread(List<Thread> threads) {
        for (Thread t:threads){
            try {
                t.join();   //t先运行  其他线程等
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }


}
